#pragma once
#include <stdint.h>
#include "link_list.h"

enum dsk_type_enum {
    DFL_DSK,
};

struct dsk_ops_struct
{
    void (* write_sector)(uint32_t sector, void* buf, uint32_t count);
    void (* read_sector)(uint32_t sector, void* buf, uint32_t count);
    uint32_t (* get_sector_size)();
    uint32_t (* get_dsk_size)();
};

struct dsk_obj_struct
{
    struct dsk_ops_struct* ops;
    enum dsk_type_enum type;
    struct linked_node node;
};

struct dsk_obj_struct* create_dsk_obj();
int32_t register_dsk_obj(struct dsk_obj_struct* dsk_obj);
struct dsk_obj_struct* find_dsk_obj(enum dsk_type_enum type);
void free_dsk_objs();